python音频初步:通过wave模块处理wav格式的音频

您所在的位置:网站首页 rb python python音频初步:通过wave模块处理wav格式的音频

python音频初步:通过wave模块处理wav格式的音频

2024-05-31 23:21| 来源: 网络整理| 查看: 265

文章目录 一个小例子读:Wave_read写:Wave_write

刷完这60个标准库模块,成为Python骨灰级玩家

一个小例子

wave用于处理wav格式的音频数据,支持单声道/立体声。

先看一个简单的示例

import wave wavRead = wave.open('test.wav','rb') #读取音频 params = wavRead.getparams() #获取音频信息 print(params) # 其值如下,分别表示通道数为2, 采样位宽为2, 帧率48k,帧数16291840,无压缩 # _wave_params(nchannels=2, sampwidth=2, framerate=48000, # nframes=16291840, comptype='NONE', compname='not compressed') wavWrite = wave.open('new.wav','wb') #新建一个wav文件 wavWrite.setparams(params) #设置音频参数 segment = wavRead.readframes(1629184) #从test.wav中读取1629184帧 wavWrite.writeframes(segment) #将音频片段写入new.wav wavRead.close() #关闭文件 wavWrite.close()

在运行完上面的代码后,可以看到工作路径下多出一个new.wav,大小差不多是test.wav的十分之一左右,即成功对test.wav进行了分割。

其中wave.open用于打开音频文件,当模式为rb时,表示只读;wb为只写。只读模式下,返回一个Wave_read对象;只写模式下,返回Wave_write的实例。

读:Wave_read

除了用于关闭音频文件的close()之外,只读模式返回的Wave_read对象中封装了许多无参函数,用以获取音频数据的信息。

getnchannels()返回声道数量,1为单声道,2为立体声getsampwidth()返回字节长度getframerate()返回采样频率getnframes()返回音频总帧数getcomptype()getcompname()返回压缩类型,然鹅只能是Nonegetparams()返回一个元组,内容包括上面五项

接下来,是Wave_read的核心功能——readframes(n)。通过该方法,可以读取并返回以bytes对象表示的最多n帧音频。

在读取n帧之后,数据流的指针也会跳到n处,通过tell()函数可以返回当前指针位置。若想让指针重新回到文件开始,可实用rewind();通过setpos(n),可以让指针跳到n处。

写:Wave_write

与Wave_read中的get相对应,Wave_write中除了也提供get方法之外,也提供一些set方法,用于设置相关的信息

getsetset功能getnchannels()setnchannels(n)设置声道数量getsampwidth()setsampwidth(n)设置字节长度为ngetframerate()setframerate(n)设置采样频率为ngetnframes()setnframes(n)设置音频总帧数为ngetcompname()getcomptype()setcomptype(type,name)设置压缩格式,然鹅只能是Nonegetparams()setparams(tuple)设置上面的那些内容

接下来,与Wave_read.readframes()针锋相对的函数为writeframes(data),用于写入音频数据,其中data为bytes格式的二进制数据。

如果想对音频数据进行字节级的处理,请移步python处理原始音频数据



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3